<?php
    include_once 'Connexion.class.php';
    include_once '/../beans/Boutique.class.php';
//    include_once '../managers/JSONmessage.class.php';
/**
 * BoutiqueDAO va servir de passerelle entre la BDD et l'application pour les boutiques, avec des opérations de CRUD, de vérification, ...
 *
 * 
 */
class BoutiqueDAO extends Connexion{
    public function __construct() {
        parent::__Construct();
    }
    
    
    // renvoie un booleen si la boutique a été ajoutée en BDD
    public function addBoutique($nom, $adresse, $tel, $lat, $lng){ 
       $preparedStmt = $this->_PDO->prepare("INSERT INTO boutique(idb, nomb, adresseb, locationLat, locationLng, telb) VALUES(NULL,?,?,?,?,?) ;");
       $preparedStmt->bindParam(1, $nom); 
       $preparedStmt->bindParam(2, $adresse); 
       $preparedStmt->bindParam(3, $lat); 
       $preparedStmt->bindParam(4, $lng); 
       $preparedStmt->bindParam(5, $tel); 
       $res =  $preparedStmt->execute();
       
       
       
       
       return $res;
        
    }
    
    /**
     *
     * @param type $horaires
     * @param int $idBoutique
     * @return type 
     */
    public function addHoraires($horaires, $idBoutique){
       $preparedStmt = $this->_PDO->prepare("INSERT INTO horaire(idBoutique, lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche) VALUES(?,?,?,?,?,?,?,?) ;");
       $preparedStmt->bindParam(1, $idBoutique); 
       $preparedStmt->bindParam(2, $horaires['lundi']); 
       $preparedStmt->bindParam(3, $horaires['mardi']); 
       $preparedStmt->bindParam(4, $horaires['mercredi']); 
       $preparedStmt->bindParam(5, $horaires['jeudi']); 
       $preparedStmt->bindParam(6, $horaires['vendredi']); 
       $preparedStmt->bindParam(7, $horaires['samedi']); 
       $preparedStmt->bindParam(8, $horaires['dimanche']); 
       $res =  $preparedStmt->execute();
       
       return $res;
    }
    
    
    public function getAllBoutiques(){
        $lesBoutiques = array();
        $stmt = $this->_PDO->query("SELECT * FROM boutique ;");
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesBoutiques[] = $this->hydrateBoutique($data);
            }
        }
        else{
            $lesBoutiques = null;
        }
        return $lesBoutiques;
        
    }
    
    // renvoie un objet de la classe Boutique ou null si résultat vides
    public function getBoutiqueById($idBoutique){
        $boutique = null;
        
        $stmt = $this->_PDO->query("SELECT * FROM boutique WHERE idb = ".  intval($idBoutique)." ;");
        if($stmt->rowCount()>0){
           $boutique =  $this->hydrateBoutique($stmt->fetch(PDO::FETCH_OBJ));
        }
        return $boutique;
    }
    
    public function getBoutiquesByLimitesGeo($latMin, $latMax, $longMin, $longMax){
        $lesBoutiques = array();
        $stmt = $this->_PDO->query("SELECT * FROM boutique WHERE locationLat BETWEEN '$latMin' AND '$latMax' AND locationLng BETWEEN  '$longMin' AND '$longMax' ;");
//        var_dump($stmt);
        if($stmt->rowCount() > 0){
            while($data = $stmt->fetch(PDO::FETCH_OBJ)){
                $lesBoutiques[] = $this->hydrateBoutique($data);
            }
        }
        else{
            $lesBoutiques = null;
        }
        return $lesBoutiques;
        
    }
    
    
    
    
    
    
    
    
    
    
    
    
    // renvoi un objet de la classe Boutique à partir d'un fetch de résultats de requete SQL
    public function hydrateBoutique($data){
        return new Boutique($data->idb, $data->nomb, $data->adresseb, $data->telb, $data->ouvertureb, $data->stockb, $data->prixb, $data->locationLat, $data->locationLng);
                
    }
  
    
    
    // renvoie le nombre de lignes correspondant en BDD à l'adresse concaténée passée en paramètre
    public function nomAdresseBoutiqueExiste($nom, $adresse){
        $preparedStmt = $this->_PDO->prepare("SELECT idb FROM boutique WHERE nomb like ? AND adresseb like ? ;");
        $preparedStmt->bindParam(1, $nom);
        $preparedStmt->bindParam(2, $adresse);
        $preparedStmt->execute();
        return $preparedStmt->rowCount();
    }
    
    
}

//$jsonMessage = new JSONmessage();
////
//$dao = new BoutiqueDAO();
//
//
//$b = $dao->getBoutiquesByLimitesGeo(48.9117, 48.9195, 2, 3);
//
//
//
//foreach ($b as $bou)
//    echo $bou->getLocationLat()." ".$bou->getAdresseBoutique()."<br>";
//    
    
    
////$jsonMessage->setBoutiques($lesBoutiques);
//
//
//print_r($jsonMessage->toBoutiquesJSON());
 



?>
